package org.easyexcel.DatalListener;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.excel.util.ListUtils;
import org.easyexcel.Pojo.MyEntity;
import org.easyexcel.Server.DataImport;

import java.util.List;


/**
 * @author DPF
 */ // 事件监听器，继承自 AnalysisEventListener，用于处理 Excel 数据读取事件
public class EasyExceGeneralDatalListener implements ReadListener<MyEntity> {

    /**
     * 处理业务逻辑的 Service，也可以是 Mapper
     */

    private DataImport import10w;

    /**
     * 用于存储读取的数据
     */
    public static final int BATCH_COUNT = 100;
    /**
     * 临时存储
     */
    private List<MyEntity> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);

    // 默认构造函数
    public EasyExceGeneralDatalListener() {
        import10w = new DataImport();
    }

    // 带参数的构造函数，传入业务逻辑 Service
    public EasyExceGeneralDatalListener(DataImport import10w) {
        this.import10w = import10w;
    }

    /**
     * 当解析到一行数据时调用此方法
     *
     * @param data    解析到的一行数据，Map 的 key 是列索引，value 是列值
     * @param context 上下文对象，包含解析过程中的信息
     */
    @Override
    public void invoke(MyEntity data, AnalysisContext context) {
        cachedDataList.add(data);
        if (cachedDataList.size() >= BATCH_COUNT) {
            saveData();
            // 存储完成清理 list
            cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
        }
    }

    /**
     * 保存数据到数据库
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        saveData();
    }

    /**
     * 当 Excel 中所有数据解析完毕时调用此方法
     */
    private void saveData() {
        cachedDataList.forEach(item -> System.out.println(item.toString()));
        import10w.import2DBFromExcel10w(cachedDataList);
    }
}
